
--class A_INT  : public __Aaa<int,   AC_INTEGER> {};
--class A_EVAL : public __Aaa<char*, AC_EVAL>    {};
--class A_STR  : public __Aaa<char*, AC_STRING>  {};
--class A_SYM  : public __Aaa<char*, AC_SYM>     {};

class ALVO_X 
feature
	cont(tag: A_CONT_TAG): AH_CONT is
		do
		end -- cont
end -- class ALVO_X 

--struct ltstr{
--  bool operator()(const char* s1, const char* s2) const{
--    return strcmp(s1, s2) < 0;
--  }
--};


--#include "alvo.hh"

AH_CONT* ALVO_X::cont(A_CONT_TAG& ag) {
	AH_CONT* R=new AH_CONT;
	R->valid=true;
	R->c=&ag;
	return R;
}
A_GRP*  ALVO_C::group() { A_GRP * R=new A_GRP;  return R; }
A_LIST*  ALVO_C::list() { A_LIST* R=new A_LIST; return R; }
A_LAZY*  ALVO_C::lazy() { A_LAZY* R=new A_LAZY; return R; }

A_INT*   ALVO_C::int_(char* ais, AH_CONT*ak) {
	return int_(atoi(ais), ak);
}

A_INT*   ALVO_C::int_(int   ai, AH_CONT*ak) {
	A_INT* R=new A_INT;
	R->m=ai;
	assert(ak->valid);
	ak->c->add(R);
	return R;
}

AH_CONT& operator<< (AH_CONT &ak, ALVO &av) {
	ak.c->add(&av);
}

A_STR*   ALVO_C::stringular(char *as, AH_CONT*ak) {
	A_STR* R=new A_STR;
	R->m=as;
	assert(ak->valid);
	ak->c->add(R);
	-- ak << R; -- TODO: change method sig
	return R;
}

A_SYM*   ALVO_C::symbol(char *as, AH_CONT*ak) {
	A_SYM* R=new A_SYM;
	R->m=as;
	assert(ak->valid);
	ak->c->add(R);
	return R;
}

A_EVAL* ALVO_C::eval(char* ac, AH_CONT*ak) {
	A_EVAL* R=new A_EVAL;
	R->m=ac;
	assert(ak->valid);
	ak->c->add(R);
	return R;
}


void AlvoM::print_int(int T) {printf("%d", T);}

